package com.example.canatest.config;

import com.alibaba.otter.canal.protocol.CanalEntry;
import com.xpand.starter.canal.annotation.*;

/**
 * @author chen.qian
 * @date 2018/3/19
 */
@CanalEventListener
public class MyEventListener {

    //表示： Mysql发生 插入时  将插入的数据监听过来
/*
    @InsertListenPoint
    public void onEvent(CanalEntry.EventType eventType, CanalEntry.RowData rowData) {
        rowData.getAfterColumnsList().forEach((c) -> System.err.println("By--Annotation: " + c.getName() + " ::   " + c.getValue()));
    }

    @UpdateListenPoint
    public void onEvent1(CanalEntry.RowData rowData) {
        System.err.println("UpdateListenPoint");
        rowData.getAfterColumnsList().forEach((c) -> System.err.println("By--Annotation: " + c.getName() + " ::   " + c.getValue()));
    }

    @DeleteListenPoint
    public void onEvent3(CanalEntry.EventType eventType) {
        System.err.println("DeleteListenPoint");
    }
*/


    /**
     * Mysql有变化 监听数据过来
     * @param eventType
     * @param rowData
     *
     *   destination ： canal的服务端的名称
     *   schema ： 数据库（Mysql）
     *   table ： 表 （Mysql）
     *   eventType ： 发生什么样的事件 将数据监听过来
     */
    @ListenPoint(destination = "example",
            schema = {"gmall_order"},
            table = {"cart_info"},
            eventType = {CanalEntry.EventType.UPDATE,
                    CanalEntry.EventType.INSERT
          }
            )
    public void onEvent4(CanalEntry.EventType eventType, CanalEntry.RowData rowData) {

        //发现Mysql变化了
        rowData.getAfterColumnsList().forEach((c) ->
                System.err.println("key: " + c.getName() +
                        " :value:   " + c.getValue()));


        //CartInfo cartInfo = new CartInfo();
        //将变化后的数据 同步Redis缓存中  Hash
        //redisTemlate.opshash.put(cartInfo.getUserId,cartInfo.getSkuId(),CartInfo);

    }
}
